2
תגובות
ביטוי רגולרי
פתח
zacharya
,
אוקי יש לי שתי שאלות על ביטויים רגולרים:
1. בביטוי רגולרי התו נקודה משתמש בתור, ממ ממלא מקום לכל תו אפשר, אך אם אני רוצה שבמקום מסויים יהיה חייב להיות נקודה? (כלומר שאם אני אשים בביטוי נקודה זה יהיה יכול להיות או נקודה או כל דבר אחר, אבל אני רוצה רק נקודה).
2. נניח ויש לי את המחרוזת הבאה;
"דני הלך !לגן! ושם הוא אכל !בננה!".
עכשיו אני רוצה למצוא את כל מה שנמצא בין סימני הקריאה (לגן, בננה), אז אני כותב את זה:
זה יחזיר לי בעצם את התוצאה הבאה:
אך אני רוצה שהוא יעצור ברגע שהוא ימצא משהו בין סימני קריאה ראשון, ואז יעבור לחפש סימן קריאה אחר ולא ימשיך, כלומר שהוא יחזיר לי את "לגן" בנפרד ואת "בננה" בנפרד, לא את "לגן! ושם הוא אכל !בננה".
(אגב ניסיתי להשתמש במודיפיקטור U אך אז זה יחזיר לי רק את "לגן").
1. בביטוי רגולרי התו נקודה משתמש בתור, ממ ממלא מקום לכל תו אפשר, אך אם אני רוצה שבמקום מסויים יהיה חייב להיות נקודה? (כלומר שאם אני אשים בביטוי נקודה זה יהיה יכול להיות או נקודה או כל דבר אחר, אבל אני רוצה רק נקודה).
2. נניח ויש לי את המחרוזת הבאה;
"דני הלך !לגן! ושם הוא אכל !בננה!".
עכשיו אני רוצה למצוא את כל מה שנמצא בין סימני הקריאה (לגן, בננה), אז אני כותב את זה:
preg_match("#!(.+)!#u", $strimg, $back);
זה יחזיר לי בעצם את התוצאה הבאה:
Array ( [0] => !לגן! ושם הוא אכל !בננה! [1] => לגן! ושם הוא אכל !בננה )
אך אני רוצה שהוא יעצור ברגע שהוא ימצא משהו בין סימני קריאה ראשון, ואז יעבור לחפש סימן קריאה אחר ולא ימשיך, כלומר שהוא יחזיר לי את "לגן" בנפרד ואת "בננה" בנפרד, לא את "לגן! ושם הוא אכל !בננה".
(אגב ניסיתי להשתמש במודיפיקטור U אך אז זה יחזיר לי רק את "לגן").
2 תשובות
1. עליך להבריך את הנקודה בעמצעות באקסלאש. בדיוק כפי שאתה עושה אם אתה רוצה שגרשיים יהיו חלק ממחרוזת
#abc\.xyz#
הברחה תופסת גם לגבי כל שאר הסימנים המיוחדים
2. בשביל זה יש מודיפיקטור U שאומר עד כמה קמצן יהיה הביטוי. בלעדיו הביטוי ינסה לתפוס את המחרוזת הכי ארוכה האפשרית. ביחד איתו הוא יסתפק במחרוזות הכי קצרות שעונות לביטוי.
שנית, עליך להשתמש ב preg_match_all אם אתה רוצה למצוא יותר מביטוי אחד וזו הסיבה שמה שניסית לא עבד לך מראש.